home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / mac / developm / source / cdevskel.cpt / CdevSkeleton2.0 ƒ / CList.p < prev    next >
Encoding:
Text File  |  1991-08-21  |  3.3 KB  |  172 lines

  1. {    CList.p}
  2. {    Copyright ⌐ 1991, Michael J. Conrad}
  3. {}
  4. {    For use with the DialogUtils unit. Handles lists.}
  5.  
  6.  
  7. UNIT CList;
  8.  
  9. INTERFACE
  10.  
  11.     USES
  12.         CCdevIntf;
  13.  
  14. IMPLEMENTATION
  15.  
  16. {------------------------------Ñ------------------------------}
  17.  
  18.     PROCEDURE CList.IList (lRect: Rect;
  19.                                     w: WindowPtr;
  20.                                     font, size: integer;
  21.                                     ProcID: integer;
  22.                                     hasScroll: Boolean);
  23.         VAR
  24.             r: Rect;
  25.  
  26.     BEGIN
  27.         listRect := lRect;
  28.         listWindow := w;
  29.         theFont := font;
  30.         theSize := size;
  31.         hasScrollBar := hasScroll;
  32.  
  33.         r := lRect;
  34.         IF hasScroll THEN
  35.             r.right := r.right - 15;
  36.  
  37.         SetRect(dataBounds, 0, 0, 1, 0);
  38.         cSize.h := r.right - r.left;
  39.         cSize.v := 0;
  40.  
  41.         TextFont(theFont);
  42.         TextSize(theSize);
  43.  
  44.         theList := LNew(r, dataBounds, cSize, ProcID, listWindow, True, False, False, hasScrollBar);
  45.         IF theList <> NIL THEN
  46.             BEGIN
  47.                 theList^^.selFlags := lOnlyOne + lNoNilHilite;
  48.                 LDoDraw(True, theList);
  49.             END;
  50.     END;
  51.  
  52. {------------------------------Ñ------------------------------}
  53.  
  54.     PROCEDURE CList.Free;
  55.     BEGIN
  56.         IF theList <> NIL THEN
  57.             LDispose(theList);
  58.         INHERITED Free;
  59.     END;
  60.  
  61. {------------------------------Ñ------------------------------}
  62.  
  63.     PROCEDURE CList.ListUpdate;
  64.         VAR
  65.             r: Rect;
  66.  
  67.     BEGIN
  68.         IF theList <> NIL THEN
  69.             BEGIN
  70.                 TextFont(theFont);
  71.                 TextSize(theSize);
  72.  
  73.                 LUpdate(listWindow^.visRgn, theList);
  74.  
  75.                 r := listRect;
  76.                 IF hasScrollBar THEN
  77.                     r.right := r.right - 15;
  78.                 InsetRect(r, -1, -1);
  79.                 FrameRect(r);
  80.             END;
  81.     END;
  82.  
  83. {------------------------------Ñ------------------------------}
  84.  
  85.     PROCEDURE CList.SelectCell (theCell: Cell);
  86.     BEGIN
  87.         LSetSelect(True, theCell, theList);
  88.     END;
  89.  
  90. {------------------------------Ñ------------------------------}
  91.  
  92.     PROCEDURE CList.AddToList (theStr: Str255);
  93.     BEGIN
  94.         IF theList <> NIL THEN
  95.             BEGIN
  96.                 cSize.h := 0;
  97.                 cSize.v := LAddRow(1, 200, theList);
  98.                 LSetCell(Pointer(ord(@theStr) + 1), length(theStr), cSize, theList);
  99.                 LDraw(cSize, theList);
  100.             END;
  101.     END;
  102.  
  103. {------------------------------Ñ------------------------------}
  104.  
  105.     PROCEDURE CList.AddListData (theData: styleListRec);
  106.     BEGIN
  107.         IF theList <> NIL THEN
  108.             BEGIN
  109.                 cSize.h := 0;
  110.                 cSize.v := LAddRow(1, 200, theList);
  111.                 LAddToCell(@theData, sizeof(theData), cSize, theList);
  112.             END;
  113.     END;
  114.  
  115. {------------------------------Ñ------------------------------}
  116.  
  117.     PROCEDURE CList.RemoveFromList;
  118.     BEGIN
  119.         IF theList <> NIL THEN
  120.             BEGIN
  121.                 cSize.h := 0;
  122.                 LDelRow(1, lastCell.v, theList);
  123.             END;
  124.     END;
  125.  
  126. {------------------------------Ñ------------------------------}
  127.  
  128.     FUNCTION CList.GetListData (theCell: Cell): Ptr;
  129.         VAR
  130.             theLen: integer;
  131.             ptrLen: longint;
  132.             theData: Ptr;
  133.             result: Str255;
  134.  
  135.     BEGIN
  136.         IF theList = NIL THEN
  137.             Exit(GetListData);
  138.  
  139.         theLen := 256;
  140.         theData := NewPtrClear(theLen);
  141.         IF memError = noErr THEN
  142.             BEGIN
  143.                 LGetCell(theData, theLen, theCell, theList);
  144.                 ptrLen := theLen;
  145.                 SetPtrSize(theData, ptrLen);
  146.                 GetListData := theData;
  147.             END;
  148.     END;
  149.  
  150. {------------------------------Ñ------------------------------}
  151.  
  152.     FUNCTION CList.DoList (event: EventRecord): Boolean;
  153.         VAR
  154.             doubleClick: Boolean;
  155.  
  156.     BEGIN
  157.         DoList := False;
  158.  
  159.         IF theList <> NIL THEN
  160.             BEGIN
  161.                 TextFont(theFont);
  162.                 TextSize(theSize);
  163.  
  164.                 doubleClick := LClick(event.where, event.modifiers, theList);
  165.                 lastCell := LLastClick(theList);
  166.                 DoList := doubleClick;
  167.             END;
  168.     END;
  169.  
  170. {------------------------------Ñ------------------------------}
  171.  
  172. END.